package org.json.custom;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * JsonSerialize: 用于指定在 Java 对象序列化为 JSON 数据时使用的自定义序列化器（Serializer）。
 * 当使用 @JsonSerialize 注解将自定义的 Serializer 应用到 Java 对象上时，Jackson 会根据该 Serializer 将 Java 对象转换为指定的 JSON 数据。
 * 如果没有使用 @JsonSerialize 指定 Serializer，Jackson 将使用默认的序列化器将 Java 对象转换为 JSON 数据。
 * JsonSerialize 的作用是允许开发人员自定义 Java 对象在序列化为 JSON 数据时的输出格式，从而更好地符合应用程序的需求。
 * 例如，可以使用自定义的 Serializer 实现 Java 对象的部分字段输出，或者更改 Java 对象输出的日期格式等。
 * 继承 JSON序列化器，重写内容之后，通过@JsonSerialize引用。
 *
 * @author yexi
 */
public class CustomJsonSerializer extends JsonSerializer<Date> {
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(DATE_FORMAT.format(value));
    }
}